package com.zx.system.block.service;

import com.zx.core.wrapper.ListWrapper;
import com.zx.core.wrapper.ObjectWrapper;
import com.zx.core.wrapper.PageWrapper;
import com.zx.core.wrapper.ResponseWrapper;
import com.zx.system.block.model.SysPost;
import com.zx.system.block.param.PostParam;
import com.zx.system.block.vo.SysPostVO;

import java.util.Map;
import java.util.Set;

/**
 * <p>
 * description: 业务层岗位服务 <br>
 * create: 2024-08-24 11:39
 * </p>
 *
 * @author zhou  xun
 */
public interface ISysPostService {

    /**
     * 获取岗位信息Map 用于岗位信息匹配
     *
     * @return 包含岗位标识符作为键, {@link SysPost} 对象作为值的映射表{@code Map<String, SysPost>}
     * @author zhou  xun
     * @since 2024-10-29
     */
    Map<String, SysPost> getPost();

    /**
     * 查询岗位列表
     *
     * @param postParam 岗位参数
     * @return {@link ListWrapper<SysPost>}
     * @author zhou  xun
     * @since 2024-10-29
     */
    ListWrapper<SysPost> selectPostList(PostParam postParam);

    /**
     * 分页查询岗位列表
     *
     * @param postParam 岗位参数
     * @return {@link PageWrapper<SysPost>}
     * @author zhou  xun
     * @since 2025-11-15
     */
    PageWrapper<SysPost> selectPostListByPage(PostParam postParam);

    /**
     * 查询岗位列表VO
     *
     * @param postParam 岗位参数
     * @return {@link ListWrapper<SysPostVO>}
     * @author zhou  xun
     * @since 2024-10-29
     */
    ListWrapper<SysPostVO> selectPostVOList(PostParam postParam);

    /**
     * 分页查询岗位列表VO
     *
     * @param postParam 岗位参数
     * @return {@link PageWrapper<SysPostVO>}
     * @author zhou  xun
     * @since 2025-11-15
     */
    PageWrapper<SysPostVO> selectPostVOListByPage(PostParam postParam);

    /**
     * 新增岗位
     *
     * @param postParam 岗位参数
     * @return {@link ResponseWrapper}
     * @author zhou  xun
     * @since 2024-10-29
     */
    ResponseWrapper addPost(PostParam postParam);

    /**
     * 编辑岗位
     *
     * @param postParam 岗位参数
     * @return {@link ResponseWrapper}
     * @author zhou  xun
     * @since 2024-10-29
     */
    ResponseWrapper editPost(PostParam postParam);

    /**
     * 编辑岗位状态
     *
     * @param id     岗位Id
     * @param status 岗位状态 0停用 1 启用
     * @return {@link ResponseWrapper}
     * @author zhou  xun
     * @since 2024-10-29
     */
    ResponseWrapper editPostStatus(String id, Integer status);

    /**
     * 删除岗位
     *
     * @param postId 岗位Id
     * @return {@link ResponseWrapper}
     * @author zhou  xun
     * @since 2024-10-29
     */
    ResponseWrapper deletePost(String postId);

    /**
     * 查询用户的岗位id列表
     *
     * @param userId 用户Id
     * @return {@link  ObjectWrapper } 岗位id集合
     * @author zhou  xun
     * @since 2025-04-15
     */
    ObjectWrapper<Set<String>> selectPostIdsByUserId(String userId);

    /**
     * 根据用户ID查询岗位信息列表
     *
     * @param userId 用户ID
     * @return {@link ListWrapper<SysPost>} 岗位信息列表
     * @author zhou  xun
     */
    ListWrapper<SysPost> selectPostListByUserId(String userId);

    /**
     * 根据用户ID查询岗位信息VO列表
     *
     * @param userId 用户ID
     * @return {@link ListWrapper<SysPostVO>} 岗位信息VO列表
     * @author zhou  xun
     */
    ListWrapper<SysPostVO> selectPostVOListByUserId(String userId);
}